package com.xcode.read.fragment;


import android.animation.ObjectAnimator;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.hardware.Camera;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.AdapterView;
import android.widget.CompoundButton;
import android.widget.FrameLayout;
import android.widget.Spinner;
import android.widget.Switch;
import android.widget.Toast;

import com.xcode.read.MainActivity;
import com.xcode.read.R;
import com.xcode.read.capture.CameraPreview;
import com.xcode.read.capture.ICaptureTakenEvent;
import com.xcode.read.capture.SavePictureTask;
import com.xcode.read.common.GlobalConfig;
import com.xcode.read.common.IFragment;
import com.xcode.read.common.Utils;
import com.xcode.read.media.BGMusicService;
import com.xcode.read.observer.VolumeChangedObserver;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;


/**
 * A simple {@link Fragment} subclass.
 */
public class CaptureStatus extends Fragment implements ICaptureTakenEvent, IFragment {

    private static final String KEY_SCENE_MODE = "KEY_SCENE_MODE";
    private static final String KEY_COLOR_EFFECT = "KEY_COLOR_EFFECT";
    private static final String KEY_LOAD_DATA = "KEY_LOAD_DATA";

    Camera _camera;
    boolean _isReadToGo = false;

    FrameLayout _previewContainer;
    CameraPreview _cameraPreview;
    MainActivity mMainActivity;
    int _front_camera_index = -1;
    int _back_camera_index = -1;
    int _currentCameraIndex = -1;
    ObjectAnimator _colorAnimation;

    Switch _shChangeStatus;
    Switch _shUseFrontCamera;
    Switch mUseNetStatus;
    VolumeChangedObserver _volumeChanged;

    private WebView mWebView;
    private View captureSettingView;
    private Spinner mColorEffectSpinner, mSceneModeSpinner;

    Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            new SavePictureTask().execute(data);
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mMainActivity = (MainActivity) getActivity();
        _volumeChanged = new VolumeChangedObserver(new Handler(), CaptureStatus.this);
        GlobalConfig.RawImageStoreUrl = Utils.getWritePath(getActivity()) + "/imgs/";
        initCamera();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_capture_status, container, false);
        initControl(view);
        initWebView(view);
        initCaptureSettingView(view);
        readyToGo();
        return view;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        relax();
    }

    private void initCaptureSettingView(View parentView) {
        captureSettingView = parentView.findViewById(R.id.capture_setting);
        captureSettingView.setVisibility(View.GONE);

        mColorEffectSpinner = (Spinner) parentView.findViewById(R.id.select_color_effect);
        mSceneModeSpinner = (Spinner) parentView.findViewById(R.id.select_scene_mode);
    }

    private void setModes() {
        mColorEffectSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String[] colorEffectArray = getResources().getStringArray(R.array.color_effect);
                writeToSp(KEY_COLOR_EFFECT, colorEffectArray[position]);
                setColorEffect(colorEffectArray[position]);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

        mSceneModeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String[] sceneModeArray = getResources().getStringArray(R.array.scene_mode);
                writeToSp(KEY_SCENE_MODE, sceneModeArray[position]);
                setSceneMode(sceneModeArray[position]);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

        String colorEffect = readFromSp(KEY_COLOR_EFFECT);
        if(!TextUtils.isEmpty(colorEffect)) {
            String[] colorEffectArray = getResources().getStringArray(R.array.color_effect);
            for(int i = 0; i < colorEffectArray.length; i++) {
                if(colorEffectArray[i].equals(colorEffect)) {
                    mColorEffectSpinner.setSelection(i);
                    setColorEffect(colorEffect);
                    break;
                }
            }
        }

        String sceneMode = readFromSp(KEY_SCENE_MODE);
        if(!TextUtils.isEmpty(sceneMode)) {
            String[] sceneModeArray = getResources().getStringArray(R.array.scene_mode);
            for(int i = 0; i < sceneModeArray.length; i++) {
                if(sceneModeArray[i].equals(sceneMode)) {
                    mSceneModeSpinner.setSelection(i);
                    setSceneMode(sceneMode);
                    break;
                }
            }
        }
    }

    public void GoWithAnimate() {
        _shUseFrontCamera.setEnabled(true);
        _colorAnimation.reverse();
        readyToGo();
        Toast.makeText(mMainActivity, R.string.alert_capture_ready, Toast.LENGTH_SHORT).show();
    }

    public void RelaxWithAnimate() {
        _shUseFrontCamera.setEnabled(false);
        _colorAnimation.start();
        relax();
        Toast.makeText(mMainActivity, R.string.alert_capture_off, Toast.LENGTH_SHORT).show();
    }

    private void readyToGo() {
        if (_isReadToGo)
            return;

        if (_camera == null) {
            try {
                _camera = Camera.open(_currentCameraIndex);
            } catch (Exception e) {
                Toast.makeText(mMainActivity, R.string.warning_camera_not_available, Toast.LENGTH_SHORT).show();
                _isReadToGo = false;
                return;
            }
        }

        setCameraParams();
        _cameraPreview = new CameraPreview(getActivity(), _camera);
        _previewContainer.addView(_cameraPreview);
        mMainActivity.getContentResolver().registerContentObserver(android.provider.Settings.System.CONTENT_URI, true, _volumeChanged);
        mMainActivity.startService(new Intent(getActivity(), BGMusicService.class));

        setModes();
        _isReadToGo = true;
    }

    private void setCameraParams() {
        Camera.Parameters parameters = _camera.getParameters();

        int cameraPictureRotation;

        if (_currentCameraIndex == _back_camera_index) {
            cameraPictureRotation = 90;

            //set preview to right orientation
            // _camera.setDisplayOrientation(90);
        } else {
            cameraPictureRotation = 270;
        }

        List<String> focusModesList = parameters.getSupportedFocusModes();

        //增加对聚焦模式的判断
        if (focusModesList.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {
            parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
        } else if (focusModesList.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
            parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
        } else if (focusModesList.contains(Camera.Parameters.FOCUS_MODE_AUTO)) {
            parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
        }

        parameters.setRotation(cameraPictureRotation);
//        List<Camera.Size> sizeList = parameters.getSupportedPictureSizes();
//        StringBuilder sizeBuilder = new StringBuilder("pic sizes = [");
//        for(Camera.Size size : sizeList) {
//            sizeBuilder.append("(").append(size.width).append(", ").append(size.height).append(")").append(",");
//        }
//        sizeBuilder.append("]");
//        Log.d("test_tt", sizeBuilder.toString());
//
//        List<Integer> formatList = parameters.getSupportedPictureFormats();
//        StringBuilder formatBuilder = new StringBuilder("pic format = [");
//        for(Integer format : formatList) {
//            formatBuilder.append(format).append(", ");
//        }
//        formatBuilder.append("]");
//        Log.d("test_tt", formatBuilder.toString());
//
//        List<String> focusModeList = parameters.getSupportedFocusModes();
//        StringBuilder focusModeBuilder = new StringBuilder("pic focus mode = [");
//        for(String focusMode : focusModeList) {
//            focusModeBuilder.append(focusMode).append(", ");
//        }
//        focusModeBuilder.append("]");
//        Log.d("test_tt", focusModeBuilder.toString());
//
//        List<String> antibandingList = parameters.getSupportedAntibanding();
//        StringBuilder antibandingBuilder = new StringBuilder("pic antibanding = [");
//        for(String antibanding : antibandingList) {
//            antibandingBuilder.append(antibanding).append(", ");
//        }
//        antibandingBuilder.append("]");
//        Log.d("test_tt", antibandingBuilder.toString());
//
//        List<String> colorEffectList = parameters.getSupportedColorEffects();
//        StringBuilder colorEffectBuilder = new StringBuilder("pic color effect = [");
//        for(String colorEffect : colorEffectList) {
//            colorEffectBuilder.append(colorEffect).append(", ");
//        }
//        colorEffectBuilder.append("]");
//        Log.d("test_tt", colorEffectBuilder.toString());
//
//        List<String> flashModeList = parameters.getSupportedFlashModes();
//        StringBuilder flashModeBuilder = new StringBuilder("pic flash mode = [");
//        for(String flashMode : flashModeList) {
//            flashModeBuilder.append(flashMode).append(", ");
//        }
//        flashModeBuilder.append("]");
//        Log.d("test_tt", flashModeBuilder.toString());
//
//        List<Camera.Size> jpegThumbnailSizes = parameters.getSupportedJpegThumbnailSizes();
//        StringBuilder jpegThumbnailSizeBuilder = new StringBuilder("pic jpeg thumbnail size = [");
//        for(Camera.Size jpegThumbnailSize : jpegThumbnailSizes) {
//            jpegThumbnailSizeBuilder.append("(").append(jpegThumbnailSize.width).append(", ")
//                .append(jpegThumbnailSize.height).append("), ");
//        }
//        jpegThumbnailSizeBuilder.append("]");
//        Log.d("test_tt", jpegThumbnailSizeBuilder.toString());
//
//        List<String> sceneModeList = parameters.getSupportedSceneModes();
//        StringBuilder sceneModeBuilder = new StringBuilder("pic scene mode = [");
//        for(String sceneMode : sceneModeList) {
//            sceneModeBuilder.append(sceneMode).append(", ");
//        }
//        sceneModeBuilder.append("]");
//        Log.d("test_tt", sceneModeBuilder.toString());
//
//        List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();
//        StringBuilder previewSizeBuilder = new StringBuilder("pic preview size = [");
//        for(Camera.Size previewSize : previewSizes) {
//            previewSizeBuilder.append("(").append(previewSize.width).append(", ")
//                    .append(previewSize.height).append("), ");
//        }
//        previewSizeBuilder.append("]");
//        Log.d("test_tt", previewSizeBuilder.toString());

        parameters.setPictureFormat(256);
        List<Camera.Size> sizeList = parameters.getSupportedPictureSizes();
        if(sizeList != null && !sizeList.isEmpty()) {
            Collections.sort(sizeList, new Comparator<Camera.Size>() {
                @Override
                public int compare(Camera.Size lhs, Camera.Size rhs) {
                    if (lhs.width > rhs.width) {
                        return -1;
                    }
                    return 0;
                }
            });
//            parameters.setPictureSize(5248, 3936);
            parameters.setPictureSize(sizeList.get(0).width, sizeList.get(0).height);
        }

        // antibanding = [auto, 50hz, 60hz, off]
        parameters.setAntibanding("auto");
        // color effect = [none, mono, negative, solarize, sepia, posterize]
//        parameters.setColorEffect("none");
        // [off, auto, on, red-eye, torch]
        parameters.setFlashMode("off");
        // [auto, portrait, landscape, night, night-portrait, beach, snow, fireworks, sports, party, barcode]
//        parameters.setSceneMode("auto");
        List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();
        if(previewSizes != null && !previewSizes.isEmpty()) {
            Collections.sort(previewSizes, new Comparator<Camera.Size>() {
                @Override
                public int compare(Camera.Size lhs, Camera.Size rhs) {
                    if(lhs.width > rhs.width) {
                        return -1;
                    }
                    return 0;
                }
            });
            parameters.setPreviewSize(previewSizes.get(0).width, previewSizes.get(0).height);
        }
//        parameters.setPreviewSize(1280, 720);
        try {
            _camera.setParameters(parameters);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void setColorEffect(String colorEffect) {
        Camera.Parameters parameters = _camera.getParameters();
        parameters.setColorEffect(colorEffect);
        try {
            _camera.setParameters(parameters);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void setSceneMode(String sceneMode) {
        Camera.Parameters parameters = _camera.getParameters();
        parameters.setColorEffect(sceneMode);
        try {
            _camera.setParameters(parameters);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void initWebView(View parentView) {
        mWebView = (WebView) parentView.findViewById(R.id.capture_web);
//        mWebView.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                captureSettingView.setVisibility(View.GONE);
//            }
//        });
        mWebView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                if (View.GONE == captureSettingView.getVisibility()) {
                    captureSettingView.setVisibility(View.VISIBLE);
                } else {
                    captureSettingView.setVisibility(View.GONE);
                }
                return false;
            }
        });
        mWebView.setWebViewClient(new WebViewClient() {
        });
        changeWebView();
    }

    private void changeWebView() {
        if(mWebView == null) {
            return;
        }
        String loadData = readFromSp(KEY_LOAD_DATA);
        if(TextUtils.isEmpty(loadData)) {
            mWebView.loadUrl("http://www.baidu.com");
        }

        String content = "<script>readx();</script>&nbsp;&nbsp;&nbsp;&nbsp;《继续解放思想，加快改革步伐》。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;这十二个字，带着一点领袖书法风格，龙飞凤舞，乃是邱明山亲笔所写。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;单看这个标题，中规中矩，没有任何不妥。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;这篇文章的主题思路和中心内容，俱皆是出自邱明山之手，邱明山做了一个大纲，然后交给秘书二科的笔杆子们去润色。秘书二科的三位同志，包括范鸿宇在内，花了整整一个星期才最后完成，交由邱明山亲自审定之后，由范鸿宇执笔誊清。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;全文将近四千字。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;在当时，不要说范鸿宇他们这些年轻的秘书，就算是邱明山本人，对这篇文章亦是相当满意的。系统地阐述了邱明山对于当前解放思想，改革开放的看法。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;按照后来的说法，邱明山是“激进派”，最坚定的改革者。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;邱明山为人正直，胸怀广博，知识面很广，是六十年代初期的本科大学生，很有水平。出任彦华地委组织部长之前，在省政府办公厅工作，理论功底相当深厚，深受省长雷云刚的器重。而雷云刚则被视为青山省“激进派”的旗手。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;八十年代中期，正是两种不同的思想碰撞最激烈之时。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;邱明山不时在党报党刊上发表一些理论性文章，阐述自己的执政思路和执政理念，被私下里戏称为青山省“激进派”的理论大师，雷云刚的“文胆”。甚至于很多人都认为，邱明山的一些理论，实际上是得自雷云刚的属意，体现了雷云刚的思路。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;范鸿宇年方二十，刚刚参加工作两三个月，原本是没有资格参与这种“大事”的，邱明山刻意栽培他，将他也列入到主要秘书班子里。这一回，还特意让他带着这篇文章，亲赴省城，去和省报文主任当面洽谈，俱皆是提携之意。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;身为地委办公室秘书班子里的一员，如果能够得到省报负责同志的青睐，于范鸿宇今后的前程，大为有利。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;二十多年前，第一次领受这个任务之时，是个什么心情，范鸿宇已经没印象了。但是现在，再一次看到这篇文章，看到自己亲笔誊写的大作，范鸿宇却冷汗澹澹而下。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;另一个平行世界，那场骤然而至的暴风疾雨，令范鸿宇记忆犹新。雷云刚调离，邱明山去职，范卫国顿失所依，被调任彦华地区环卫处副主任，从此一直管着清洁工直至退休。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;而范鸿宇自己的命运，也同样来了个一百八十度大逆转。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;想当初，范秘书可也是雄心壮志，想要在政坛上一展抱负，造福桑梓，青史留名。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;只是，政治上风云变幻，一般人又哪里看得明白了？<br><br>&nbsp;&nbsp;&nbsp;&nbsp;当时，基层干部谁能想到，高层风暴正在酝酿之中，不久之后，一场激烈无比的斗争就要爆发，某位高层领导同志随之去职，由此引发的风暴波及面极广。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;邱明山这篇文章，成为对方抨击的主要对象，认为邱明山是典型的“经济挂帅”，身为党务干部，对完全漠视党建工作，没有原则没有底线，是典型的资产阶级自由化思想，非常危险。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;那次风波，导致青山省政坛大洗牌。雷云刚系干部，几乎“全军覆没”，再也未能恢复元气。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;邱明山更是在三年之后因为救人而英勇牺牲。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;时光荏苒，二十多年后，除了当年曾在他身边工作过的干部，似乎再没人记得他了。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;而现在，历史依旧按照固有的轨迹在前进，这篇当时曾经得到雷云刚点名表扬，在省政府常务会议上当众宣读的文章，静静地躺在范鸿宇的手里，暂时还没有变成《青山日报》的铅字。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;十来页稿纸，在范鸿宇手中，仿佛有千钧之重。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;可是，我回来了啊。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;我应该做点什么！<br><br>&nbsp;&nbsp;&nbsp;&nbsp;这个声音，忽然在范鸿宇的心中呐喊。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;对，应该做点什么，一定要做点什么，一定要避免这个严重后果再次发生。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;范鸿宇的双眼，变得亮晶晶的。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;往往这种时候，就意味着范鸿宇决心已定。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;范鸿宇拿着那篇稿子，身子微微后仰，靠在后座上，双眼微眯，陷入了沉思之中。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;作为重生者，有一点，范鸿宇很明白，雷云刚邱明山等人失势，这篇文章并非关键。关键在于高层的风向变了。作为某位高层领导同志最忠实的追随者，雷云刚身上早已被打上了深深的“派系烙印”。就算没有这篇文章，雷云刚也一样会被调离现职位。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;这是必不可免的。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;到了封疆大吏这个层级，他的政治取向，执政理念，往往就决定了他的政治前途。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;而在一省之内，地区级别的主要领导干部，也存在同样的问题。更何况邱明山一直被视作是雷云刚的心腹干将，“文胆”，雷云刚一出事，他几乎没有丝毫腾挪闪避的余地。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;更不用说彦华地委的梁书记，一直对邱明山心存忌惮。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;邱明山能力很强，在彦华地区干部群众之中的威望极高，加上有省长雷云刚撑腰，邱明山早已对梁书记的地位造成了很大的“威胁”。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;雷云刚失势，梁书记焉能容忍自己身边再埋着这样一颗“定时炸弹”？<br><br>&nbsp;&nbsp;&nbsp;&nbsp;然而，自己该怎样做，才能挽回这个结局呢？<br><br>&nbsp;&nbsp;&nbsp;&nbsp;一时之间，范鸿宇有些彷徨无计。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;时光倒流之前，范鸿宇就是一名普通的刑事警察，破案抓罪犯，那是行家里手。谈到这种事关全局的政治大势，他可不内行。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;关键点！<br><br>&nbsp;&nbsp;&nbsp;&nbsp;这件事的关键点在哪里？<br><br>&nbsp;&nbsp;&nbsp;&nbsp;要想改变整件事的结局，就必须找出关键点来，加以改变，才能起到作用。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;范鸿宇把出了破案子的劲头，苦苦思索，随手将稿子在自己的手里拍打着，眼神无意间在稿子上扫过……<br><br>&nbsp;&nbsp;&nbsp;&nbsp;忽然，范鸿宇的眼神再一次亮了起来。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;关键点找到了。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;这篇稿子，就是关键点！<br><br>&nbsp;&nbsp;&nbsp;&nbsp;高层大势，范鸿宇自然无力改变，连边都挨不着嘛，谈何改变？<br><br>&nbsp;&nbsp;&nbsp;&nbsp;但是，他能改变邱明山的态度！<br><br>&nbsp;&nbsp;&nbsp;&nbsp;或者说，他能帮邱明山改变这个态度！<br><br>&nbsp;&nbsp;&nbsp;&nbsp;刚刚刘主任有一句话没说错，《青山日报》编辑部的文主任，确实是邱明山的同学，而且是很铁的朋友，相交二十几年了。有关这篇文章在省报上发表的事宜，邱明山早已在电话里和文主任说好了。原本可以通过挂号信的方式直接给省报寄过去，刚好刘主任要去省城公干，有便车可搭，邱明山索性便派范鸿宇走上一趟，让他直接和文主任见个面，日后文主任也能给范鸿宇一些关照。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;也就是说，在这篇文章见报之前，范鸿宇还有机会改变历史。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;对，就是这么办！<br><br>&nbsp;&nbsp;&nbsp;&nbsp;范鸿宇的眼神越来越亮，随即从公文包里拿出一摞空白稿子，从夹克口袋里取出钢笔，开始在稿子上刷刷地写了起来。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;要说服邱明山改变观点，显然不可能。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;范鸿宇又不能明着告诉邱明山，不久之后，高层大局就要起惊人变化，他和雷云刚都要倒霉。在邱明山面前爆出这种神棍似的“预言”，简直就是自找麻烦。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;范鸿宇决定直接改稿子。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;反正这稿子本来也是他誊写的。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;打小爱看课外书，范鸿宇的文字功底一贯不错。尽管在另一个世界，十几年时间他做的都是犯罪口供，殊无文采可言。但纯理论性文章，文采本来就不是第一位的。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;重要的是思想和内容。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;八六年那会，彦华地区通往省城的省道线，破烂不堪，到处都坑坑洼洼的，吉普车颠簸得十分厉害，不过却并没有影响到范鸿宇写稿子。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;毕竟现在还只是写个草稿，字迹潦草没关系。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;今天肯定不能去见文主任了，先在洪州住一个晚上再说，好好把稿子赶出来，明天再交给文主任好了。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;见范鸿宇忽然在车里用起功来，刘主任眼里闪过一抹诧异的神情，但也没有多说什么。在他眼里，范鸿宇本来便有点神经兮兮的，就是个二杆子。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;如果没有邱明山关照，像范鸿宇这种性格的后生子，十个也被赶走了吧？<br><br>&nbsp;&nbsp;&nbsp;&nbsp;至少刘主任肯定不待见他。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;彦华地区首府彦华市到洪州市的公路距离是两百三十多公里，若是在后世，走高速只需要两个多小时，加上市区内的时间，大约也就是三个小时左右便足够了。但在眼下，却差不多要走上六七个小时，早上九点出发，加上在途中停留吃中饭，一直到下午四点多，吉普车才风尘仆仆地驶进了洪州城。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;车内，范鸿宇轻轻放下钢笔，伸手揉了揉太阳穴。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;初稿已经完成了！<br><br>&nbsp;&nbsp;&nbsp;&nbsp;现在，范鸿宇只有一个担心，就是不知道邱明山是否在电话里和文主任沟通过文章的基本内容。要是沟通过，他这个偷梁换柱的法子，只怕要露陷。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;但事已至此，有进无退。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;无论如何，都要搏一把。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;邱明山的前途，范卫国的前途，乃至他范鸿宇自己的前途，都押上去了。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;同样的人生轨迹，范鸿宇可不想依样葫芦再来一回。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;那也该太没劲了。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;要玩，就玩把大的！<br><br>&nbsp;&nbsp;&nbsp;&nbsp;ps：诸君，今天上架，至少会有四章以上，馅饼不多话，诚恳拜求点击，拜求推荐！";
        if("local".equals(loadData)) {
            mWebView.getSettings().setDefaultTextEncodingName("utf-8");
            Log.d("chen_test", "encode == " + mWebView.getSettings().getDefaultTextEncodingName());
            mWebView.loadDataWithBaseURL(null, content, "text/html", "utf-8", null);
//            mWebView.loadData(content, "text/html", "utf-8");
        } else {
            mWebView.loadUrl("http://www.baidu.com");
        }
    }

    private void relax() {

        if (_isReadToGo == false)
            return;

        if (_camera != null) {
            _camera.stopPreview();
            _camera.release();
            _camera = null;
        }

        _previewContainer.removeView(_cameraPreview);
        mMainActivity.getContentResolver().unregisterContentObserver(_volumeChanged);
        mMainActivity.stopService(new Intent(mMainActivity, BGMusicService.class));
        _isReadToGo = false;
    }


    @Override
    public Context GetContext() {
        return mMainActivity.getApplicationContext();
    }

    @Override
    public void TakenPicture() {
        if (_isReadToGo)
            _camera.takePicture(null, null, pictureCallback);
    }

    void initCamera() {
        int cameraCount = Camera.getNumberOfCameras();
        Camera.CameraInfo cameraInfo = new Camera.CameraInfo();

        for (int i = 0; i < cameraCount; i++) {
            Camera.getCameraInfo(i, cameraInfo);
            if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK)
                _back_camera_index = i;
            else if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT)
                _front_camera_index = i;
        }
        _currentCameraIndex = _back_camera_index;
    }

    void initControl(View view) {
        _previewContainer = (FrameLayout) view.findViewById(R.id.flCameraContainer);
        _shChangeStatus = (Switch) view.findViewById(R.id.status_change_state);
        _shUseFrontCamera = (Switch) view.findViewById(R.id.status_change_camera);

        _shChangeStatus.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked)
                    GoWithAnimate();
                else
                    RelaxWithAnimate();
            }
        });

        _shUseFrontCamera.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                _currentCameraIndex = isChecked ? _front_camera_index : _back_camera_index;
                relax();
                readyToGo();
            }
        });

        mUseNetStatus = (Switch) view.findViewById(R.id.status_use_net);
        mUseNetStatus.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked) {
                    writeToSp(KEY_LOAD_DATA, "net");
                    changeWebView();
                } else {
                    writeToSp(KEY_LOAD_DATA, "local");
                    changeWebView();
                }
            }
        });

        String loadData = readFromSp(KEY_LOAD_DATA);
        if(TextUtils.isEmpty(loadData)) {
            mUseNetStatus.setChecked(false);
        }

        if("local".equals(loadData)) {
            mUseNetStatus.setChecked(false);
        } else {
            mUseNetStatus.setChecked(true);
        }

//        _colorAnimation = Utils.GenerateColorAnimator(mMainActivity, R.animator.status_color_change, _statusContainer);
    }

    private void writeToSp(String key, String value) {
        SharedPreferences sp = getActivity().getSharedPreferences("test_sp", Activity.MODE_PRIVATE);
        SharedPreferences.Editor spEditor = sp.edit();
        spEditor.putString(key, value);
        spEditor.commit();
    }

    private String readFromSp(String key) {
        SharedPreferences sp = getActivity().getSharedPreferences("test_sp", Activity.MODE_PRIVATE);
        return sp.getString(key, null);
    }

    @Override
    public void OnEnter() {

    }
}
